package cn.iocoder.yudao.module.system.dal.mysql.userMenu;

import java.util.*;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleMenuDO;
import cn.iocoder.yudao.module.system.dal.dataobject.userMenu.UserMenuDO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.system.controller.admin.userMenu.vo.*;

/**
 * 用户和菜单关联 Mapper
 *
 * @author 管理员
 */
@Mapper
public interface UserMenuMapper extends BaseMapperX<UserMenuDO> {

    default PageResult<UserMenuDO> selectPage(UserMenuPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<UserMenuDO>()
                .eqIfPresent(UserMenuDO::getUserId, reqVO.getUserId())
                .eqIfPresent(UserMenuDO::getMenuId, reqVO.getMenuId())
                .betweenIfPresent(UserMenuDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
                .orderByDesc(UserMenuDO::getId));
    }

    default List<UserMenuDO> selectList(UserMenuExportReqVO reqVO) {
        return selectList(new LambdaQueryWrapperX<UserMenuDO>()
                .eqIfPresent(UserMenuDO::getUserId, reqVO.getUserId())
                .eqIfPresent(UserMenuDO::getMenuId, reqVO.getMenuId())
                .betweenIfPresent(UserMenuDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
                .orderByDesc(UserMenuDO::getId));
    }

    default List<UserMenuDO> selectList(Long userId) {
        return selectList(new LambdaQueryWrapperX<UserMenuDO>()
                .eqIfPresent(UserMenuDO::getUserId, userId)
                .orderByDesc(UserMenuDO::getId));
    }

    default void deleteListByUserIdAndMenuIds(Long userid, Collection<Long> menuIds) {
        delete(new QueryWrapper<UserMenuDO>().eq("user_id", userid)
                .in("menu_id", menuIds));
    }
}
